#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <limits.h>
#include <time.h>
#include <getopt.h>
#include <mqueue.h>
#include <pthread.h>

#define IPC_QUEUE_NAME          "/ipc_dispatch"
#define IPC_MESSAGE_MAX_SIZE    512

#define IPC_MOTION_START                "\x01\x00\x00\x00\x02\x00\x00\x00\x7c\x00\x7c\x00\x00\x00\x00\x00"
#define IPC_MOTION_START_C              "\x04\x00\x00\x00\x02\x00\x00\x00\x09\x70\x09\x70\x00\x00\x00\x00"
#define IPC_MOTION_STOP                 "\x01\x00\x00\x00\x02\x00\x00\x00\x7d\x00\x7d\x00\x00\x00\x00\x00"
#define IPC_AI_HUMAN_DETECTION          "\x01\x00\x00\x00\x02\x00\x00\x00\xed\x00\xed\x00\x00\x00\x00\x00"
#define IPC_AI_BODY_DETECTION_C         "\x04\x00\x00\x00\x02\x00\x00\x00\x06\x70\x06\x70\x00\x00\x00\x00"
#define IPC_AI_VEHICLE_DETECTION_C      "\x04\x00\x00\x00\x02\x00\x00\x00\x07\x70\x07\x70\x00\x00\x00\x00"
#define IPC_AI_ANIMAL_DETECTION_C       "\x04\x00\x00\x00\x02\x00\x00\x00\x08\x70\x08\x70\x00\x00\x00\x00"
#define IPC_BABY_CRYING                 "\x04\x00\x00\x00\x02\x00\x00\x00\x02\x60\x02\x60\x00\x00\x00\x00"
#define IPC_SOUND_DETECTION             "\x04\x00\x00\x00\x02\x00\x00\x00\x04\x60\x04\x60\x00\x00\x00\x00"

int ipc_init();
void ipc_stop();
static int open_queue();
static int clear_queue();
static int parse_message(char *msg, ssize_t len);
void print_usage(char *progname);
